谈谈mongodb如何设计评论表的表结构
前言:
打算使用node+koa+mongodb打造一个博客的后台,遇到了如何设计评论表的困惑,因为如果采用开放评论的模式,就会导致评论的层层嵌套,使得管理和展示都变得非常复杂。通过各方探索和思考,我发现了一个非常不错的设计方法,在此分享给大家,希望可以对同样困惑的人给与帮助。
说明:
1.我在设计的时候不考虑评论的评论的评论这种操作,我也是借鉴了sf这个网站的设计,因为如果考虑到这层操作,这个表结构的设计就会变的相当复杂,毕竟不是群聊,而且该评论下的动态会推送给所有人,你们如果想要交流可以直接在最大的评论下评论,或者发私信,所以没必要考虑到这一层。
2.这种设计是我个人的想法,初生牛犊,难免会有不成熟的地方,希望有不足的地方可以评论或者发私信告知我改正,方便我们学习成长。
评论表的表结构:
{
"_id" : ObjectId("597aa23add840cd4ce0681d1"),
"comment_blog_id" : "blog id",
"comment_user_id" : "A",
"comment_content" : "A的评论",
"create_time" : "2017-15-12 14:00",
"comment_responses" : [
{
"response_user_id" : "B",
"response_user_phone" : "B的phone",
"response_user_nickname" : "B的nickname",
"response_content" : [
"这是B给A的评论(带着索引index)",
"这是B给A的评论(带着索引index)",
"这是B给A的评论(带着索引index)"
],
"create_time" : "2017-15-12 14:00",
"get_reply" : [
"这是A给B的某一个评论的回复如果有就对应插入index对应的元素没有就是空串",
"A没有回复B这一条就是空串",
"A个神经病跳着回复了这一条评论,这数组的第三个元素就是A回复的内容"
]
},
{
"response_user_id" : "C",
"response_user_phone" : "C的phone",
"response_user_nickname" : "C的nickname",
"response_content" : [
"这是C给A的评论(带着索引index)",
"这是C给A的评论(带着索引index)",
"这是C给A的评论(带着索引index)"
],
"create_time" : "2017-15-12 14:00",
"get_reply" : [
"这是A给C的第index个评论的回复",
"A没有回复C这一条就是空串",
"A个神经病跳着回复了这一条评论,这数组的第三个元素就是A回复的内容"
]
}
]
}
插入与展示的方法
1.A在B的第index条评论下回复了B,那么对应的内容就存放在get_reply[index]里面。
2.展示的时候先遍历显示A的评论
3.然后遍历A里面的comment_responses数组。
4.接着遍历comment_responses数组中的元素的response_content数组
5.以第一条为例,遍历response_content数组显示B给A的评论,然后检查get_reply数组中的对应索引的元素是不是空,空代表没有回复,不显示,非空则跟着这条评论显示回复。
6.以此类推即可完成显示。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。